package com.ys.whiledemo;

import java.util.Scanner;

/**
 * @author CodeYang
 * @Description 万年历:
 * 因为1900年1月1日正好是星期一， 假设输入的是：1901年3月，1901年3月1日前面有几个空格
 * *		([1900, 1901)的总天数  + [1901年1月, 1901年3月)的总天数 + 1) % 7
 * * 实现步骤：
 * * 	 1)通过Scanner获取年(year)和月(month)
 * * 	 2)获取[1900, year)的总天数 + [year年1月， year年month月)的总天数
 * * 		从而获取到year年month月的1号前面有几个空格
 * *   3)获取year年month月的总天数
 * *   4)实现year年month月的日历布局
 * @Date 2020/12/7 21:21
 */
public class CalendTest01 {

    public static void main(String[] args) {
        //1 获取 输入的----年 月
        Scanner input = new Scanner(System.in);
        System.out.print("请输入年:");
        int year = input.nextInt();
        System.out.print("请输入月:");
        int month = input.nextInt();

        // 获取总天数:  年份的总天数+月份总天数
        // 获取年分 :[1900,year)
        // 用于保存年的总天数
        int yearDays = 0;

        for (int i = 1900; i < year; i++) {

            // 判断一下 平年与闰年的天数变化:
            if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
                //闰年:
                yearDays += 366;
            } else {
                //平年
                yearDays += 365;
            }
        }

        //2获得 year 年 1月 到 year年moth月的总天数
        int monthDays = 0;
        for (int i = 1; i < month; i++) {
            switch (i) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    monthDays += 31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    monthDays += 30;
                    break;
                case 2:
                    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                        //闰年:
                        monthDays += 29;
                    } else {
                        //平年
                        monthDays += 28;
                    }
                    break;
                default:
                    System.out.println("你输入的月份有误,请重新输入");
            }

        }
        // 3获取 当前年 当前月的总天数
        int monthDay = 0;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                monthDay = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                monthDay = 30;
                break;
            case 2:
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                    //闰年:
                    monthDay = 29;
                } else {
                    //平年
                    monthDay = 28;
                }
                break;
            default:
                System.out.println("你输入的月份有误,请重新输入");
                break;
        }

        // 4 实现日历的布局
        // 4.1 获取总天数
        int allDays = yearDays + monthDays;
        //4.2 获取 当前年,当前月 的1号前面有多少个空格
        int temp = (allDays + 1) % 7;
        // 4.3 输出星期几:
        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        //4.4 先展示空格数
        for (int i = 0; i < temp; i++) {
            System.out.print("\t");
        }
        // 4.5 展示当前月的天数
        for (int i = 1; i <=monthDay; i++) {
            System.out.print(i + "\t");
            if ((temp + i) % 7 == 0) {
                System.out.println();
            }
        }

    }
}
